# -*- coding:utf-8 -*-
"""
@Time:  2024/5/28 12:39
@Auth:  Mrs.Gou 
@Function:  正则
"""

# 正则
# 既是编程里面的奇迹，也是编程里面的灾难
# 其主要作用是从字符串里面提取符合规则的子串

# ():成对的小括号()用来定义操作符的范围和优先度
# []:条件集合
# +:加号代表前面的字符必须至少出现一次（一次或多次）
import json
import re



s = '''
<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta content="always" name="referrer"><meta name="theme-color" content="#ffffff"><meta name="description" content="全球领先的中文搜索引擎、致力于让网民更便捷地获取信息，找到所求。百度超过千亿的中文网页数据库，可以瞬间找到相关的搜索结果。"><link rel="shortcut icon" href="
/favicon.ico
" type="image/x-icon" /><link rel="search" type="application/opensearchdescription+xml" href="/content-search.xml
" title="百度搜索" /><link rel="icon" sizes="any" maskhref="//www.baidu.com/img/baidu_85beaf5496f291521eb75ba38eacbd87.svg
"><link rel="dns-prefetch" href="//dss0.bdstatic.com
"/><link rel="dns-prefetch" href="//dss1.bdstatic.com
"/><link rel="dns-prefetch" href="//ss1.bdstatic.com
"/><link rel="dns-prefetch" href="//sp0.baidu.com
"/><link rel="dns-prefetch" href="//sp1.baidu.com
"/><link rel="dns-prefetch" href="//sp2.baidu.com
"/><title>百度一下，你就知道
</title><style index="newi" type="text/css">
<body>
<div class="c-tips-container" id="c-tips-container"></div>
<script>
var s_session={
"logId":"3614294667",
"seqId":"3614294907",
"sessionId":"",
"debug":false,
"userTips":"{}",
"curmod":"2",
"firstmod":"",
"logoCode":false,
"isFesLogo":false,
"sid":"36454_34813_36422_36166_36488_36055_36419_26350_36299_36468_36315_36447",
"mSid":"",
"sample_value":"",
"isLogin":false,
"agingVoice": "",
"卡卡": "632232258",
"Will": "1052949192",
"Phone": "18874922908"
};
window.__async_strategy = 2;
</script>
</body>
<<body>
</html>
'''

# # 在字符串前面添加r的作用，是忽略字符串的里面的转义
# # 主要应用在正则，文件路径等
# s1 = r'\tjiosjo\n'
# print(s1)
#
# res = re.findall(r'', s)
#
# res1 = re.findall(r'<body>', s)
# res2 = re.findall(r'body', s)
# # +就是前面的字符至少出现1次
# res3 = re.findall(r'(<+body>)', s)
# print(res1)
# print(res2)
# print(res3)
#
# # ?就是前面的字符出现0次或者1次
# res4 = re.findall(r'(<?body>)', s)
# print(res4)
#
# # *就是前面的字符最多出现0次、1次、多次
# res5 = re.findall(r'(<*body>)', s)
# print(res5)
#
# # 或者
# res6 = re.findall('<body>|html>', s)
# print(res6)
#
# # 拿出所有的QQ和手机号
# # QQ号特点：纯数字，至少6位数，最多13位，第一位不是0
# # 手机号特点：11位纯数字，1开头，第二位[3-9]，后面都是数字
#
# # QQ号
# # res7 = re.findall('[1-9][0-9]{5,12}', s)
# # \d和[0-9]是一个意思
# res7 = re.findall(r'[1-9]\d{5,12}', s)
# print(res7)
#
# # 手机号
# res8 = re.findall('1[3-9][0-9]{9}', s)
# print(res8)
#
# # 查找第一次出现的位置
# res9 = re.search('<html>', s)
# print(res9)
#
# # 场景1：匹配两个字符串中间的字符(包括换行)
# # re.S	使 . 匹配包括换行在内的所有字符
# res10 = re.findall('<title>.*</title>', s, re.S)
# print(res10)
#
# 场景2：提取json字符串
# res11 = re.findall('s_session=({.*});', s, re.S)
# print(res11)
# # 字符串转成字典（\n哪些会自动去掉）
# print(json.loads(res11[0]))

# 场景3：去掉字符串中的空字符
# 点. 匹配除“\n”和"\r"之外的任何单个字符。要匹配包括“\n”和"\r"在内的任何字符，请使用像“[\s\S]”的模式。
# \s匹配任意一个空白字符，如空白、空格、tab，{m,}至少出现m次
# print('去掉字符串中空字符')
# res12 = re.sub(r'\s{2,}', '', res11[0])
# print(res12)
# print(json.loads(res12))

# # 场景4：获取link标签内容(贪心：会一直匹配到最后一个/>)
# res13 = re.findall('<link .*/>', s, re.S)
# print(res13)
# print(len(res13))
#
# # 场景5：获取所有link标签内容(非贪心：匹配到第一个/>后停止)
# res14 = re.findall('<link .*?/>', s, re.S)
# print(res14)
# print(len(res14))

# 字符串截取:find从列表左往右查找第一个出现的下标，rfind从右往左查找
res = s[s.find('{'):s.rfind('}') + 1]
print(json.loads(res))
